/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Data;

import BugTracking.Exceptions;
import decode.crypto;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Administrador
 * Clase encargada de administrar archivos
 */
public class FileProcess {
    String file;
    String type;
    //Escribir
    FileWriter fWriter = null;
    BufferedWriter bWriter = null;
    //Leer
    File archivo = null;
    FileReader fr = null;
    BufferedReader br = null;
    /**
     * Administrador de Archivos
     * @param f
     * Nombre del archivo
     * @param t
     * r=leer w=escribir
     */
    public FileProcess(String f, String t){
        file = f;
        type = t;
    }
    /**
     * Inicializar el archivo
     */
    public void init(){
        try {
            if (type.equalsIgnoreCase("w")){
                fWriter = new FileWriter(file);
                bWriter = new BufferedWriter(fWriter);
            }
            else if (type.equalsIgnoreCase("r")){
                archivo = new File (file);
                fr = new FileReader (archivo);
                br = new BufferedReader(fr);
            }
        } catch (IOException e) {
            //e.printStackTrace();
        }
    }
    /**
     * Leer el archivo
     * @return
     * Devuelve en un String el archivo leido
     * @exception
     * Guardar en archivo log detalles
     */
    public String readToString(){
        if (br==null) init();
        String linea="";
        String lineas="";
        try {
            while ((linea = br.readLine()) != null) {
                lineas +=linea;
            }
        } catch (IOException ex) {
            Exceptions e = new Exceptions();
            e.write("No se puedo leer archivo: "+file);
        }
        return lineas;
    }
    /**
     * Leer el archivo
     * @return
     * Retorna un array de String, un posicion por cada linea en modo Object
     * @throws
     * No se pudo leer Archivo, detalles en error.log
     */
    public Object[] read(){
        List<String> list;
        list = new ArrayList<String>();
        if (br==null) init();
        String linea="";
        try {
            while ((linea = br.readLine()) != null) {
                list.add(linea);
            }
        } catch (IOException ex) {
            Exceptions e = new Exceptions();
            e.write("No se puedo leer archivo: "+file);
        }
        Object[] aa = list.toArray();
        return aa;
    }
    /**
     * Cerrar archivo creado o abierto
     */
    public void close(){
        try {
            fWriter.close();
            bWriter.close();
        } catch (IOException ex) {
            Exceptions error = new Exceptions();
            error.write(ex.getMessage());
        }
    }
    /**
     * Escribir una cadena en el archivo
     * @param cad
     * Cadena de String a escribir en el archivo
     * @throws
     * Error No se puedo escribir en archivo, detalles en error.log
     */
    public void write(String cad){
        try {
            fWriter.write(cad);
        } catch (IOException ex) {
            Exceptions error = new Exceptions();
            error.write("No se pudo escribir en archivo:"+file+" - "+ex.getMessage());
        }
    }
    /**
     * Escribe una cadena con salto de linea en el archivo
     * @param cad
     * * Cadena de String a escribir en el archivo
     * @throws
     * Error No se puedo escribir en archivo, detalles en error.log
     */
    public void writeln(String cad){
        write(cad+"\n");
    }

}
